﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using BL;
using BE;
using System.Collections;
using System.Web.SessionState;
using CrystalDecisions.CrystalReports.Engine;
namespace UI.Secretaria
{
    public partial class frmNominaNuevo : System.Web.UI.Page
    {
        private Reporte rptreporte = new Reporte(); 
        public List<Nomina_BE> listaNomina = new List<Nomina_BE>();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

                listaNomina.Clear();
                String Semestre = Session["SemestreNomina"].ToString();

                semestreaGenerar();

                llenaCiclos();

                llenaCombos();
              //  seleccionaCombo();
               // llenaGrilla();
                

                HttpContext.Current.Session["NOMINA_NUEVO"] = listaNomina;
            }
        }


        void llenaCiclos()

        {
            // se llena la grilla con los alumnos pertenecientes a la nomina anterior
            // por ejemplo si se va generar nomina 20141 ciclo 6 se jala los datos del semestre 20131 y ciclo 4

            String auxiliar = lblSemestre.Text.Substring(lblSemestre.Text.Length - 1, 1);

            ArrayList listaCiclo = new ArrayList();
            if (auxiliar == "1")
            {

                listaCiclo.Clear();
                listaCiclo.Add("1");
                listaCiclo.Add("2");
                listaCiclo.Add("3");
                listaCiclo.Add("4");
                listaCiclo.Add("5");
                listaCiclo.Add("6");
                listaCiclo.Add("7");
                listaCiclo.Add("8");
                listaCiclo.Add("9");
                listaCiclo.Add("10");

            }

            if (auxiliar == "2")
            {
                listaCiclo.Clear();
               listaCiclo.Add("1");
                listaCiclo.Add("2");
                listaCiclo.Add("3");
                listaCiclo.Add("4");
                listaCiclo.Add("5");
                listaCiclo.Add("6");
                listaCiclo.Add("7");
                listaCiclo.Add("8");
                listaCiclo.Add("9");
                listaCiclo.Add("10");
            }

            ddlCiclo.DataSource = listaCiclo;
            ddlCiclo.DataBind();
            ddlCiclo.Items.Insert(0, "--Seleccione--");




        }

        void semestreaGenerar()
        {
            Util_BL obj = new Util_BL();
            DataTable dato = new DataTable();
            dato = obj.DATA_MATRIC1_Nomina_NuevoSemestre();

            lblSemestre.Text = dato.Rows[0]["Semestre"].ToString();

        }

        void llenaCombos()
        {

            DataTable dato = new DataTable();
            Alumno_BL obj = new Alumno_BL();

            dato = obj.DATA_ESPECIALIDAD_ListaEspecialidades();
            ddlEspecialidad.DataSource = dato;
            ddlEspecialidad.DataTextField = "desesp";
            ddlEspecialidad.DataValueField = "cod_Espec";
            ddlEspecialidad.DataBind();
            ddlEspecialidad.Items.Insert(0, "--Selecciones--");


           
        }


            void llenaGrilla()
            {
             
                HttpContext context = HttpContext.Current;
                List<Nomina_BE> lis = (List<Nomina_BE>)context.Session["NOMINA_NUEVO"];
                lis.Clear();
                // si se va generar nomina para el primer ciclo los datos de los alumnos 
                // se obtienen de la tabla data_PreMatricula

                Alumno_BL objIngresantes = new Alumno_BL();
               
                

                // muestra los datos del semestre activo

                /* Obteniendo el semestre activo*/

                DataTable dato = new DataTable();
                Util_BL obj1 = new Util_BL();
                Nomina_BE detalle = new Nomina_BE();
                Alumno_BL obj = new Alumno_BL();


                dato = obj1.DATA_PERIODO_listaActivo();

                String semestreActivo = dato.Rows[0]["Semestre"].ToString();
                Int32 cicloActivo = Convert.ToInt32(ddlCiclo.SelectedValue) - 1;

                /*Fin*/


                // cuando el ciclo es I se obtiene los datos de la tabla data_PreMatricula


                if (ddlCiclo.SelectedValue == "1")
                {
                    lis = obj.DATA_MATRIC1_Lista_INGRESANTES(lblSemestre.Text, ddlEspecialidad.SelectedValue);
                 
                }

                else
                {
                    
                    // se utiliza semestre nuevo para calcular la edad en el store procedure
                    lis = obj.Lista_DATA_MATRIC1_Nomina(semestreActivo, cicloActivo.ToString(), ddlEspecialidad.SelectedValue,lblSemestre.Text);
                
                }


                if (lis.Count == 0)
                {
                    lblMensajePrincipal.Text = "No existe registros";
                    DataTable d = new DataTable();
                    grvAlumno.DataSource = d;
                    grvAlumno.DataBind();
                }


                else

                {
                    lblMensajePrincipal.Text = "";
                    grvAlumno.DataSource = lis;
                    grvAlumno.DataBind();
                }

                btnProcesar.Enabled = true;


                HttpContext.Current.Session["NOMINA_NUEVO"] = lis;
                CuentaItemsGrilla(lis);


            }

            protected void grvAlumno_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                try
                {
                    if (e.Row.RowType == DataControlRowType.DataRow)
                    {
                        //DropDownList combo = (DropDownList)e.Row.FindControl("ddlEstadoAlumno");
                        //combo.ClearSelection();
                        //if (!object.ReferenceEquals(combo, DBNull.Value))
                        //{
                        //    this.llenaComboEstadoAlumno(combo);
                        //}

                       


                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }


            void llenaComboEstadoAlumno(DropDownList combo)
            {

                Util_BL obj = new Util_BL();
                DataTable dato = new DataTable();
                dato = obj.ESTADO_CONDICION_listar();
                combo.DataSource = dato;
                combo.DataTextField = "Descripcion";
                combo.DataValueField = "Id_Estado_Condicion";
                combo.DataBind();


            }

            protected void btnProcesar_Click(object sender, ImageClickEventArgs e)
            {

                //Int32 nuevoCiclo = Convert.ToInt32(ddlCiclo.SelectedValue) + 1;
                try
                {


                    // si ya se genero la nómina ya no se puede generar se edita la nomina en el formulario de edicion de nominas
                    Secretaria_BL objConsulta = new Secretaria_BL();
                    DataTable dato = new DataTable();
                    dato = objConsulta.DATA_MATRIC1_ListaNominas_PorSemestre(lblSemestre.Text, ddlCiclo.SelectedValue, ddlEspecialidad.SelectedValue);
                    if (dato.Rows.Count > 0)
                    {
                        lblMensajePrincipal.Text = "La Nómina ya fué generada,para Modificar la nómina vaya a Edición de Nóminas";
                        DataTable r = new DataTable();
                        grvAlumno.DataSource = r;
                        grvAlumno.DataBind();
                        btnProcesar.Enabled = false;
                        return;

                    }



                    //fin 



                    registraNomina();
                    btnProcesar.Enabled = false;
                    ImprimeNomina();
                    lblMensajePrincipal.Text = "Registro Grabado Correctamente";
                }
                catch ( Exception ex)
                {
                    lblMensajePrincipal.Text = "Ocurrio un error al Grabar: " + ex.Message;
                    
                }
               
                


            }


            void registraNomina()
            {



                Alumno_BL obj = new Alumno_BL();

                DropDownList ddl;
                TextBox TEXTO;
                string id_EstadoAlumno;
                String semestre ;
                String cod_espec;
                String ciclo ;
                String cod_seccion;
                String cod_alumno ;
                String condicion ;
                String num_matricula ;
                String estado ;// indica activo
                String flag_confirmado ;
                String usuario_registra;
                String rd;
                DateTime fecha_registro;

                try
                {



                    foreach (GridViewRow objItem in grvAlumno.Rows)
                    {
                        ddl = ((DropDownList)objItem.Cells[0].FindControl("ddlEstadoAlumno"));
                        TEXTO = ((TextBox)objItem.Cells[0].FindControl("txtRD"));
                        id_EstadoAlumno = grvAlumno.DataKeys[objItem.RowIndex].Values["Condicion_Alumno"].ToString();
                        semestre = lblSemestre.Text;
                        cod_espec = ddlEspecialidad.SelectedValue;
                        ciclo = ddlCiclo.SelectedValue;
                        cod_seccion = "A";
                        cod_alumno = grvAlumno.DataKeys[objItem.RowIndex].Values["COD_ALUMNO"].ToString();
                        condicion = ddl.SelectedValue;
                        num_matricula = "";
                        estado = "1";// indica activo
                        flag_confirmado = "0";
                        usuario_registra = User.Identity.Name;
                        fecha_registro = DateTime.Now;
                        rd = TEXTO.Text.Trim();
                      obj.DATA_MATRIC1_Inserta_Nomina(semestre, cod_espec, ciclo, cod_seccion, cod_alumno, condicion, num_matricula, estado, flag_confirmado, usuario_registra, fecha_registro,rd);
                        

                      
                       

                       


                    }
                }

                catch (Exception ex)
                {
                    lblMensajePrincipal.Text = "Ocurrio un problema al Grabar :" + ex.Message;
                }

                



            }

            


            void SeleccionaEstado()
            {

                foreach (GridViewRow objItem in grvAlumno.Rows)
                {
                    DropDownList ddl = ((DropDownList)objItem.Cells[0].FindControl("ddlEstadoAlumno"));
                   
                   //string IdProducto = objItem.Cells[1].Text; //Producto_id del Gridview.
                   string id_EstadoAlumno = grvAlumno.DataKeys[objItem.RowIndex].Values["Condicion_Alumno"].ToString();
                   ddl.SelectedValue = id_EstadoAlumno;
                    
                }

            }

            protected void btnBuscar2_Click(object sender, EventArgs e)
            {

                if (ddlEspecialidad.SelectedIndex == 0)
                {
                    lblMensajePrincipal.Text = "Seleccione una Especialidad";
                    return;

                }

                if (ddlCiclo.SelectedIndex == 0)

                {
                    lblMensajePrincipal.Text = "Seleccione un Ciclo";
                    return;
                }



                // si ya se genero la nómina ya no se puede generar se edita la nomina en el formulario de edicion de nominas
                Secretaria_BL objConsulta = new Secretaria_BL();
                DataTable dato = new DataTable();
                dato = objConsulta.DATA_MATRIC1_ListaNominas_PorSemestre(lblSemestre.Text, ddlCiclo.SelectedValue, ddlEspecialidad.SelectedValue);
                if (dato.Rows.Count>0)
                {
                    lblMensajePrincipal.Text = "La Nómina ya fué generada,para Modificar la nómina vaya a Edición de Nóminas";
                    btnProcesar.Enabled = false;
                        return;

                }



                //fin 



                llenaGrilla();
                SeleccionaEstado();
            }

            public void CuentaItemsGrilla(List<Nomina_BE> lis)
            {
                if (lis.Count == 0)
                {
                    grvAlumno.Caption = "No se encontró coincidencias";
                }
                else if (lis.Count == 1)
                {
                    grvAlumno.Caption = "Total de items - 1 registro encontrado";
                }
                else
                {
                    grvAlumno.Caption = "Total de items - " + lis.Count + " registros encontrados";
                }
            }



            protected void btnBuscarModal_Click(object sender, EventArgs e)
            {
                llenaGrillaAgregaAlumnos();
            }

            void llenaGrillaAgregaAlumnos()
            {

                  /* Obteniendo el semestre activo*/

                DataTable dato = new DataTable();
                Util_BL obj1 = new Util_BL();
                Nomina_BE detalle = new Nomina_BE();
                Alumno_BL obj = new Alumno_BL();


                dato = obj1.DATA_PERIODO_listaActivo();

                String semestreActivo = dato.Rows[0]["Semestre"].ToString();
                Int32 cicloActivo = Convert.ToInt32(ddlCiclo.SelectedValue) - 1;
               




                /*Fin*/
                String codigo = "";

                if (txtCodigo.Text.Length == 0)
                {
                     codigo = "TODOS";


                }

                else

                {
                    codigo = txtCodigo.Text.Trim();

                }
                dato.Clear();

                dato = obj.DATA_MATRIC1_AgregaAlumnos(semestreActivo, ddlCiclo.SelectedValue, ddlEspecialidad.SelectedValue, lblSemestre.Text, codigo);

                if (dato.Rows.Count == 0)
                {
                    lblMensaje.Text = "No se encontraron registros.";

                }

                else

                {
                    lblMensaje.Text = "";
                    grvAgregaAlumnos.DataSource = dato;
                    grvAgregaAlumnos.DataBind();
                }

                CuentaItemsGrilla(dato);



            }

            protected void btnAgregar_Click(object sender, ImageClickEventArgs e)
            {
                mpeAgregaAlumno.Show();


            }

            protected void btnSalir_Click(object sender, EventArgs e)
            {
                mpeAgregaAlumno.Hide();
            }

            protected void grvAgregaAlumnos_SelectedIndexChanged(object sender, EventArgs e)
            {

                Nomina_BE OBJ = new Nomina_BE();

                HttpContext context = HttpContext.Current;
                List<Nomina_BE> lis = (List<Nomina_BE>)context.Session["NOMINA_NUEVO"];


                OBJ.COD_ALUMNO = grvAgregaAlumnos.SelectedRow.Cells[1].Text;
                OBJ.Nombres = Server.HtmlDecode(grvAgregaAlumnos.SelectedRow.Cells[2].Text);// para que no muestre caracteres extraños
                OBJ.COD_ESPEC = grvAgregaAlumnos.SelectedRow.Cells[4].Text;
                OBJ.Condicion_Alumno = Convert.ToInt32(grvAgregaAlumnos.SelectedRow.Cells[5].Text);
                OBJ.Descripcion_Estado = grvAgregaAlumnos.SelectedRow.Cells[6].Text;
               OBJ.Edad = grvAgregaAlumnos.SelectedRow.Cells[7].Text;
               OBJ.Semestre = lblSemestre.Text;
               OBJ.SEXO = grvAgregaAlumnos.SelectedRow.Cells[8].Text;
               OBJ.Usuario_Registro = User.Identity.Name;
               OBJ.Fecha_Registro = DateTime.Now;

               if (lis.Exists(delegate(Nomina_BE x) { return x.COD_ALUMNO == OBJ.COD_ALUMNO; }))
               {
                   lblMensaje.Text = "El Alumno con ID: " + OBJ.COD_ALUMNO + " ya existe";
               }
               else
               {
                   lis.Add(OBJ);
                   grvAlumno.DataSource = lis;
                   grvAlumno.DataBind();

                   HttpContext.Current.Session["NOMINA_NUEVO"] = lis;

                   DataTable limpia = new DataTable();
                   grvAgregaAlumnos.DataSource = limpia;
                   grvAgregaAlumnos.DataBind();
                   
               }



               

            
                
            }

            protected void btnEliminar_Click(object sender, ImageClickEventArgs e)
            {


                HttpContext context = HttpContext.Current;
                List<Nomina_BE> lis = (List<Nomina_BE>)context.Session["NOMINA_NUEVO"];
                


                foreach (GridViewRow objItem in grvAlumno.Rows)
                {
                    CheckBox remove = ((CheckBox)objItem.Cells[0].FindControl("chkActivo"));
                    if (remove.Checked == true)
                    {
                        
                        string codigo = grvAlumno.DataKeys[objItem.RowIndex].Values["COD_ALUMNO"].ToString();

                        //Response.Write("CODIGO: "+IdProducto+"<br/>");
                        Nomina_BE ENT = lis.Find(delegate(Nomina_BE x) { return x.COD_ALUMNO == codigo; });
                        lis.Remove(ENT);
                    }
                }


               


                grvAlumno.DataSource = lis;
                grvAlumno.DataBind();


            }

            protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
            {
                Response.Redirect("frmConsultaNomina.aspx");
            }




            void ImprimeNomina()
            {

                String cicloRomano = "";
                Util_BL objUtil2 = new Util_BL();
                cicloRomano = objUtil2.CICLO_ROMANO(ddlCiclo.SelectedValue);

                // se arma un datatable co los datos de especialidad ciclo escuela
                Util_BL objUtil = new Util_BL();
                DataTable dato = new DataTable();
                DataTable dato2 = new DataTable();
                DataTable dato3 = new DataTable();
                dato = objUtil.DATA_ESPECIALIDAD_ListaPorCodigo(ddlEspecialidad.SelectedValue);
                dato2 = objUtil.DATA_MATRIC1_CuentaPorSexo(lblSemestre.Text, ddlEspecialidad.SelectedValue, ddlCiclo.SelectedValue, "F"); // CUENTA SEXO FEMENINO
                dato3 = objUtil.DATA_MATRIC1_CuentaPorSexo(lblSemestre.Text, ddlEspecialidad.SelectedValue, ddlCiclo.SelectedValue, "M"); // CUENTA SEXO MASCULINO

                DataTable Cabecera = new DataTable();
                Cabecera.Columns.Add("SEMESTRE_ACADEMICO");
                Cabecera.Columns.Add("ESCUELA_PROFESIONAL");
                Cabecera.Columns.Add("ESPECIALIDAD");
                Cabecera.Columns.Add("CICLO");
                Cabecera.Columns.Add("CONTEO_SEXOF");
                Cabecera.Columns.Add("CONTEO_SEXOM");

                DataRow fila = Cabecera.NewRow();
                fila[0] = lblSemestre.Text;
                fila[1] = dato.Rows[0]["Descripcion"].ToString();
                fila[2] = ddlEspecialidad.SelectedItem.Text;
                fila[3] = cicloRomano;
                fila[4] = dato2.Rows[0]["SEXO"].ToString();
                fila[5] = dato3.Rows[0]["SEXO"].ToString();


                Cabecera.Rows.Add(fila);

                Cabecera.AcceptChanges();
                Cabecera.TableName = "Cabecera";


                DataTable Detalle = new DataTable();
                Detalle.Columns.Add("Codigo");
                Detalle.Columns.Add("ApellidosyNombres");
                Detalle.Columns.Add("Condicion");
                Detalle.Columns.Add("Edad");
                Detalle.Columns.Add("Sexo");
                Detalle.Columns.Add("Observacion");

               


                // se obtiene los datos del detalle
                DropDownList ddl;
                String codigo;
                String nombres;
                String estado;
                String edad;
                String sexo;
                String OBS;
                foreach (GridViewRow objItem in grvAlumno.Rows)
                {
                        ddl = ((DropDownList)objItem.Cells[0].FindControl("ddlEstadoAlumno"));
                    

                         codigo = grvAlumno.DataKeys[objItem.RowIndex].Values["COD_ALUMNO"].ToString();
                         nombres = grvAlumno.DataKeys[objItem.RowIndex].Values["Nombres"].ToString();
                        estado=ddl.SelectedItem.Text.Trim();
                        edad = grvAlumno.DataKeys[objItem.RowIndex].Values["Edad"].ToString();
                        sexo = grvAlumno.DataKeys[objItem.RowIndex].Values["SEXO"].ToString();
                        OBS="";
                        DataRow fila2 = Detalle.NewRow();
                        fila2[0] = codigo;
                        fila2[1] = nombres;
                        fila2[2] = estado;
                        fila2[3] = edad;
                        fila2[4] = sexo;
                        fila2[5] = OBS;
                        Detalle.Rows.Add(fila2);
                    
                }

                //fin
               // ImprimeNomina2(Cabecera, Detalle);
                Session.Remove("DatoNomina");
                Session.Remove("DetalleNomina");
                Session["DatoNomina"] = Cabecera;
                Session["DetalleNomina"] = Detalle;
                

                
               
              string script = "<script>window.open('frmReporte2.aspx');</script>";
                ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "CERRAR", script, false);

               

            }

            protected void grvAgregaAlumnos_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                GridView gv = (GridView)sender;
                gv.PageIndex = e.NewPageIndex;
                llenaGrillaAgregaAlumnos();
            }

            public void CuentaItemsGrilla(DataTable dato)
            {
                if (dato.Rows.Count == 0)
                {
                    grvAgregaAlumnos.Caption = "No se encontró coincidencias";
                }
                else if (dato.Rows.Count == 1)
                {
                    grvAgregaAlumnos.Caption = "Total de items - 1 registro encontrado";
                }
                else
                {
                    grvAgregaAlumnos.Caption = "Total de items - " + dato.Rows.Count + " registros encontrados";
                }
            }

            protected void grvAlumno_RowCreated(object sender, GridViewRowEventArgs e)
            {
                //if(e.Row.RowType==DataControlRowType.DataRow){
                //AjaxControlToolkit.PopupControlExtender pce=(AjaxControlToolkit.PopupControlExtender) e.Row.FindControl("PopupDetalles") ;

                // String behaviorID="pce"+e.Row.RowIndex;
                // pce.BehaviorID = behaviorID;
                // Image  i   = (Image) e.Row.Cells[1].FindControl("ImageButtonDetalles");

                // String OnMouseOverScript = string.Format("$find('{0}').showPopup();", behaviorID);
                // String OnMouseOutScript = string.Format("$find('{0}').hidePopup();", behaviorID);
                //  i.Attributes.Add("onmouseover", OnMouseOverScript);
                //  i.Attributes.Add("onmouseout", OnMouseOutScript);
                //}
            }



            

    }
}
